// 获取上一个元素兼容
function getpreviousSibling(ele) {
    if (ele.previousElementSibling) {
        return ele.previousElementSibling;
    } else {
        var node = ele.previousSibling;
        while(node != null && node.nodeType != 1) {
            node = node.previousSibling;
        }
        return node;
    }
}

// 获取下一个元素兼容
function getNextElementSibling(ele) {
    if(ele.nextElementSibling) {
        return ele.nextElementSibling;
    } else {
        var node = ele.nextSibling;
        while (node != null && node.nodeType != 1) {
            node = node.nextSibling;
        }
        return node;
    }
}

// 获取第一个元素兼容
function getFirstElementChild(ele) {
    if(ele.firstElementChild) {
        return ele.firstElementChild;
    } else {
        var node = ele.firstChild;
        while(node.nodeType != 1) {
            node = node.nextSibling;
        }
        return node;
    }
}

// 获取最后一个元素兼容
function getLastElementChild(ele) {
    if(ele.lastElementChild) {
        return ele.lastElementChild;
    } else {
        var node = ele.lastChild;
        while(node.nodeType != 1) {
            node = node.previousSibling;
        }
        return node;
    }
}

// 获取子元素时的兼容问题
function getChildren(ele) {
    var child = [];
    for(var i = 0; i < ele.children.length; i++) {
        if(ele.children[i].nodeType == 1){
            child[child.length] = ele.children[i];
        }
    }
    return child;
}

// 设置文本时兼容处理
function inner(ele,content) {
    if(ele.innerText == undefined) {
        ele.textContent = content;
    } else {
        ele.innerText = content;
    }
}

// 设置时分秒的角度
function time() {
    var h = document.getElementById('h');
    var m = document.getElementById('m');
    var s = document.getElementById('s');
    var date = new Date();
    var second = date.getSeconds()*6
    var min = (date.getMinutes() + (date.getSeconds()/60))*6
    var hour = (date.getHours()+date.getMinutes()/60+date.getSeconds()/3600)*30
    h.style.transform = "rotate(" + hour +"deg)"
    m.style.transform = "rotate(" + min +"deg)"
    s.style.transform = "rotate(" + second +"deg)";
}

// 匀速动画
function animation(ele,target) {
    // 清除同个对象定时器
    clearInterval(ele.timeId);
    ele.timeId = setInterval(function(){
        //记录当前位置
        var current = ele.offsetLeft;
        //判断是向左向右然后进行每一次位移距离
        var currentleft = current < target ? current + 15 : current - 15;
        //移动并边界检测
        ele.style.left = Math.abs(current-target) < 15 ? target +'px' : currentleft + 'px';
        ele.offsetLeft == target? clearInterval(ele.timeId): null;
    },10)
}

//获取元素值兼容
function getStyle(ele,arrt) {
    if(window.getComputedStyle) {
        return window.getComputedStyle(ele)[arrt]
    } else {
        return ele.currentStyle[arrt];
    }
}

//多个参数的缓动动画
function animationSlow(ele,styleele,fn) {
    // 清除同一个对象的定时器
    clearInterval(ele.timeID);
    ele.timeID = setInterval(function(){
        var isOK = true;
        for (var arrt in styleele) {
            if(arrt == 'opacity') {
                target = styleele[arrt] * 100;
                //设置当前位置
                var current= parseFloat(getStyle(ele,arrt)) *100;
                // 设置步长;
                var step = (target - current)/10;
                //如果小于0,就取地板,如果大于0就取天花板
                step = step > 0? Math.ceil(step) : Math.floor(step); 
                //设置每一步移动距离
                current += step;
                //移动,
                ele.style[arrt] = current/100 ;
            } else if (arrt == 'backgroundColor') {
                ele.style[arrt] = styleele[arrt];
            } else if (arrt == 'zIndex') {
                ele.style[arrt] = styleele[arrt];
            } else {
                target = styleele[arrt];
                //设置当前位置
                var current= parseInt(getStyle(ele,arrt));
                // 设置步长;
                var step = (target - current)/10;
                //如果小于0,就取地板,如果大于0就取天花板
                step = step > 0? Math.ceil(step) : Math.floor(step); 
                //设置每一步移动距离
                current += step;
                //移动,
                ele.style[arrt] = current + 'px' ;
            }
            if(current != target) {
                isOK = false;
            }
        }
        // 判断达到边界就停止
        if(isOK) {
            clearInterval(ele.timeID);
            if(typeof fn == 'function') {
                fn();
            }
        }
    },20)
}

//设置多个属性缓动动画,(可以设置旋转,回正需自己计算旋转圈数)
function animationAll(ele,styleele,times=20,fn) {
    // 清除同一个对象的定时器
    clearInterval(ele.timeID);
    //默认的旋转度数
    var currentdeg = 0
    ele.timeID = setInterval(function(){
        var isOK = true;
        for (var arrt in styleele) {
            if(arrt == 'opacity') {
                target = styleele[arrt] * 100;
                //设置当前位置
                var current= parseFloat(getStyle(ele,arrt)) *100;
                // 设置步长;
                var step = (target - current)/10;
                //如果小于0,就取地板,如果大于0就取天花板
                step = step > 0? Math.ceil(step) : Math.floor(step); 
                //设置每一步移动距离
                current += step;
                //移动,
                ele.style[arrt] = current/100 ;
            } else if (arrt == 'backgroundColor') {
                ele.style[arrt] = styleele[arrt];
            } else if (arrt == 'zIndex') {
                ele.style[arrt] = styleele[arrt];
            } else if (arrt == 'transform'){
                for (var attr in styleele) {
                    //记录每一个的终点
                    target = styleele[arrt]
                    target = parseFloat(target.split('(')[1])  
                    //1,记录当前位置,
                    //2,设置步数
                    var step = (target - currentdeg)/100;
                    var step = step > 0? Math.ceil(step) : Math.floor(step);
                    //3.位移
                    currentdeg += step;
                    ele.style[attr] = 'rotate(' + currentdeg + 'deg)';   
                    // console.log(currentdeg);
                    // console.log(step);
                    if(step == 0) {
                        current = target;
                    } 
                } 
            } else {
                target = parseInt(styleele[arrt]);
                
                //设置当前位置
                var current= parseInt(getStyle(ele,arrt));
                // 设置步长;
                var step = (target - current)/10;
                //如果小于0,就取地板,如果大于0就取天花板
                step = step > 0? Math.ceil(step) : Math.floor(step); 
                //设置每一步移动距离
                current += step;
                //移动,
                ele.style[arrt] = current + 'px' ;
            }

            if(current != target) {
                isOK = false;
            }
        }
        // 判断达到边界就停止
        if(isOK) {
            clearInterval(ele.timeID);
            if(typeof fn == 'function') {
                fn();
            }
        }
    },times)
}